/**
 * Copyright (c) 2021-2025 Huawei Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

function print_report(max_test : int, passed : int) : void {
    console.print("TOTAL:" + max_test + ";")
    console.print("PASSED:" + passed)
    console.println();
}

function parametrize<T>(name: string, inputs: T[], cb: (x: T) => number): () => int {
    const inner = (): int => {
        let failures = 0
        for (let i = 0; i < inputs.length; ++i) {
            const result = cb(inputs[i])
            if (result > 0) {
                console.log("✕ Failed test `" + name + "` on [" + (i+1) + "/" + inputs.length + "] args pair")
                failures += 1
            } else {
                console.log("✓ Passed test `" + name + "` [" + (i+1) + "/" + inputs.length + "]")
            }
        }
        return ((failures > 0) ? 1 : 0)
    }
    return inner
}

const boolToResult = (x: boolean, inverse?: boolean): int => (
    ((inverse === undefined ? false : inverse) ? !x : x) ? 0 : 1
)
